<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  .box {
    width: 100px;
    height: 100px;
    margin: 100px auto;
    background: papayawhip;
    border: 1px solid transparent;
  }

  .box-border {
    border-color: #333;
  }
</style>

<body>
  <div class="box" id="case" onclick="changeBorder()"></div>
  <input type="text" name="num01" id="num01">
  <input type="text" name="num02" id="num02">
  <!-- <button id="add" onclick="add()">+</button>
  <button id="sub" onclick="sub()">-</button>
  <button id="mul" onclick="mol()">x</button>
  <button id="modulo" onclick="modulo()">/</button> -->
  <button id="add" onclick="calc(add)">+</button>
  <button id="sub" onclick="calc(sub)">-</button>
  <button id="mul" onclick="calc(mul)">x</button>
  <button id="modulo" onclick="calc(modulo)">/</button>
  <button id="mod">%</button>
  <input type="text" name="outnum" id="outnum">

  <script>
    /* - 求斐波那契数列第N项的值
     * - 斐波那契数列又称黄金分割数列，如 “1, 1, 2, 3, 5, 8, 13, 21……”
     * - 这个数列从第3项开始，每一项都等于前两项之和。
     * - 代码实现原理：
      * - 小于0，给出错误提示信息。
      * - 等于0，返回0。
      * - 等于1，返回1。
      * - 大于1，按找到的规律并利用函数递归调用实现。 
    */
    //   function fibonacci(n) {
    //     if (n == 1 || n == 2) {
    //         return 1
    //     };
    //     return fibonacci(n - 2) + fibonacci(n - 1);
    // }
    // fibonacci(50);
    // console.log(fibonacci(3));
    function fibonacci(n) {
      if (n < 0) {
        console.log('输入错误');
      }
      else if (n == 0) {
        return 0;
      }
      else if (n == 1) {
        return 1;
      } else {
        return fibonacci(n - 2) + fibonacci(n - 1);
      }
    }
    console.log(fibonacci(15));

    /* - 使用函数实现从小到大排序 
      * - 给出一组数据，要求按照从小到大进行排序。 
    */
    var arr = [23, 56, 81, 37, 72, 1, 99, 73];
    arr.sort(function (a, b) {
      return a - b;
    })
    console.log(arr);

    /* - 函数求阶乘
      * - 给出一个数，利用函数直接可以求出阶乘计算结果和求出阶乘函数的和。
    */

    var b = 1;
    var c = 0;
    var p = +prompt('请输入一个数');
    function factorial(p) {
      for (var i = 1; i < p; i++) {
        b *= i;
        c += i;
      }
      return '阶乘为' + b + '阶乘函数的和为' + c;
    }
    console.log(factorial(p));

    // function getSum(num) {
    //     var _sum = 0;
    //     for (var i = 1; i <= num; i++) {
    //         _sum += getFactorial(i);
    //     }
    //     return _sum;
    // }

    // function getFactorial(num) {
    //     var _product = 1;
    //     for (var i = 2; i <= num; i++) {
    //         // _product = _product * i;
    //         _product *= i;
    //     }
    //     return _product;
    // }

    // console.log(getFactorial(1));
    // console.log(getSum(4));


    /* - 判断是否是闰年
      * - 用户输入一个年份，通过函数来判断输入的年份是闰年还是平年。 
    */
    var year = +prompt('请输入一个年份');
    function thisYear(n) {
      if (n % 400 == 0 || (n % 4 == 0 && n % 100 != 0)) {
        if (n % 400 == 0) {
          return '这一年是世纪闰年'
        }
        return '这一年是普通闰年';
      } else {
        return '这一年是平年';
      }
    }
    document.write(thisYear(year));
    // console.log(year);
    // year(2010);

    /* - 函数计算圆的面积和周长
     *  - 定义周长和面积函数，用程序来计算圆的面积和周长。 
    */
    // var r = 5;
    var Π = 314;
    var area;
    var perimeter;
    function circle(r) {
      area = parseInt(Π * r * r) / 100;
      perimeter = parseInt(2 * r * Π) / 100;
      return '圆的面积为' + area + '圆的周长为' + perimeter;
    }
    console.log(circle(5));


    /* - 两个整数相互交换 */
    // var c;
    // function change(a, b) {
    //   c = a;
    //   a = b;
    //   b = c;
    //   console.log(a, b);
    // }
    // change(5, 7);

    function change(a, b) {
      return [b, a];
    }
    console.log(change(5, 7));


    /* - 点击为盒子添加边框样式 */
    // document.getElementById('case').onclick = function () {
    //   let e = document.getElementById('case');
    //   e.style.border = '1px solid #333';
    // }

    // var e = document.getElementById('case');
    // e.onclick = function(){
    //   e.style.border = "1px solid #333";
    // }

    // var _box = document.getElementById('case');
    // var condition = false;
    // _box.onclick = function () {
    //   if (condition) {
    //     _box.style.border = "none";
    //     condition = false;
    //   } else {
    //     _box.style.border = "1px solid #333";
    //     condition = true;
    //   }
    // }

    function changeBorder() {
      var _box = document.getElementById('case');
      var _box_class = _box.getAttribute('class');
      if (_box_class == 'box') {
        _box.setAttribute('class', 'box box-border');
      } else {
        _box.setAttribute('class', 'box');
      }
    }

    /*
     * 网页计算器
     * - 编写HTML页面，两个文本框用于输入数据，4个按钮用于完成加减乘除运算，最后一个文本框显示计算结果。
     * - 编写calc()函数，获取并转换输入的数据，判断，不合法给出提示，调用指定函数完成相关计算。
     * - 编写函数，实现加、减、乘、除运算。
     */

    //方法一：
    // function add() {
    //   var _num01 = +document.getElementById('num01').value;
    //   var _num02 = +document.getElementById('num02').value;
    //   var _outnum = +document.getElementById('outnum');
    //   if (isNaN(_num01) || isNaN(_num02)) {
    //     alert('请输入正确的数字');
    //     return false;
    //   }
    //   _outnum.value = _num01 + _num02;
    // }
    // function sub() {
    //   var _num01 = +document.getElementById('num01').value;
    //   var _num02 = +document.getElementById('num02').value;
    //   var _outnum = +document.getElementById('outnum');
    //   if (isNaN(_num01) || isNaN(_num02)) {
    //     alert('请输入正确的数字');
    //     return false;
    //   }
    //   _outnum.value = _num01 - _num02;
    // }
    // function mul() {
    //   var _num01 = +document.getElementById('num01').value;
    //   var _num02 = +document.getElementById('num02').value;
    //   var _outnum = +document.getElementById('outnum');
    //   if (isNaN(_num01) || isNaN(_num02)) {
    //     alert('请输入正确的数字');
    //     return false;
    //   }
    //   _outnum.value = _num01 * _num02;
    // }
    // function modulo() {
    //   var _num01 = +document.getElementById('num01').value;
    //   var _num02 = +document.getElementById('num02').value;
    //   var _outnum = +document.getElementById('outnum');
    //   if (isNaN(_num01) || isNaN(_num02)) {
    //     alert('请输入正确的数字');
    //     return false;
    //   }
    //   if (_num2 === 0) {
    //     alert('除数不能为0');
    //     return '';
    //   }
    //   _outnum.value = _num01 / _num02;
    // }

    //方法二：
    function calc(func) {
      var _num01 = +document.getElementById('num01').value;
      var _num02 = +document.getElementById('num02').value;
      var _outnum = document.getElementById('outnum');
      if (isNaN(_num01) || isNaN(_num02)) {
        alert('请输入正确的数字');
        return false;
      }
      _outnum.value = func(_num01, _num02);
    }
    function add(_num01, _num02) {
      return _num01 + _num02;
    }
    function sub(_num01, _num02) {
      return _num01 - _num02;
    }
    function mul(_num01, _num02) {
      return _num01 * _num02;
    }
    function modulo(_num01, _num02) {
      if (_num02 === 0) {
        alert('除数不能为0');
        return '';
      }
      return _num01 / _num02;
    }

  </script>
</body>

</html>